package com.dao;

import com.entity.User;

import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface UserDao {

  /**
   * 获取所有用户数量
   *
   * @return 所有用户数量
   */
  int selectAllUserCount();

  List<Map<String, Object>> selectAllUsers(
      @Param("startIndex") int startIndex, @Param("num") int num, @Param("userId") String userId);
  // 插入一个user
  int insertAUser(@Param("userId") String userId, @Param("userName") String userName);

  // 获取User
  User selectAUser(@Param("userId") String userId);

  Map<String, String> selectUserLink(@Param("userId") String userId);

  String selectImageURL(@Param("userId") String userId);

  // 修改昵称
  int updateNickname(@Param("userId") String userId, @Param("nickname") String nickname);

  void updateImageURL(@Param("userId") String userId, @Param("imageURL") String imageURL);

  int updateBasicInfo(
      @Param("userId") String userId,
      @Param("realName") String realName,
      @Param("sex") char sex,
      @Param("email") String email,
      @Param("birthday") String birthday,
      @Param("age") int age,
      @Param("location") String location,
      @Param("elucidation") String elucidation);

  int updateEduInfo(
      @Param("userId") String userId,
      @Param("school") String school,
      @Param("major") String major,
      @Param("enrollYear") int enrollYear,
      @Param("eduBackGround") String eduBackGround);

  int updateLabel(
      @Param("userId") String userId,
      @Param("label1Id") int label1Id,
      @Param("label2Id") int label2Id,
      @Param("label3Id") int label3Id);

  /**
   * 获取用户的商品出售权限
   *
   * @param userId 用户编号
   * @return 用户商品违规次数
   */
  Map<String, Object> selectSellPermission(@Param("userId") String userId);

  int updateSellPermission(
      @Param("userId") String userId,
      @Param("toTime") Date toTime,
      @Param("goodBeReportedCount") int goodBeReportedCount);

  /**
   * 获取用户的评论权限
   *
   * @param userId 用户编号
   * @return 评论被举报成功次数、禁言至
   */
  Map<String, Object> selectUserCommentPermission(@Param("userId") String userId);

  int updateCommentPermission(
      @Param("userId") String userId,
      @Param("toTime") Date toTime,
      @Param("commentBeReportCount") int commentBeReportCount);

  List<String> selectAllUserIds();
}
